#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "nvs_flash.h"
#include <stdio.h>
#include <string.h>
#include "led.h"
#include "uart.h"
#include "esp_log.h"


/**
 * @brief       程序入口
 * @param       无
 * @retval      无
 */
void app_main(void)
{
    esp_err_t ret;
    uint16_t len = 0;
    uint16_t times = 0;
    char data[10] = {0};
    char *a = "LED_ON";
    char *b = "LED_OFF";

    ret = nvs_flash_init();         /* 初始化NVS */

    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
    {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ESP_ERROR_CHECK(nvs_flash_init());
    }

    led_init();                     /* 初始化LED */
    uart0_init(115200);             /* 初始化串口0 */
    // 控制台输出也是用的串口0，波特率115200
    // 如果两边配置的波特率不一样，实际以这里为准
    // 串口监视器的波特率使用的是sdkconfig中的。会导致串口监视器和串口工具两个只有一个能正常使用。

    while(1)
    {
        uart_get_buffered_data_len(USART_UX, (size_t*) &len);

        if (len > 0)
        {
            uart_read_bytes(USART_UX, data, len, 100);
            data[len] = '\0';

            if (strcmp(a, data) == 0)
            {
                LED0(0);
                ESP_LOGI("LED", "LED0 ON"); // sdkconfig中 CONFIG_ESP_CONSOLE_UART 将控制台输出发送到串口0，波特率115200
            }
            else if (strcmp(b, data) == 0)
            {
                LED0(1);
                ESP_LOGI("LED", "LED0 OFF");
            }

            memset(data, 0, 10);
        } else {
            times ++;

            if (times % 1000 == 0)
            {
                printf("串口实验...\n"); // sdkconfig中 CONFIG_ESP_CONSOLE_UART 将日志输出发送到串口0，波特率115200
            }
        }

        vTaskDelay(pdMS_TO_TICKS(10));    /* 延时10ms */
    }
}